#include<stdio.h>
#include<stdlib.h>
// 对应Singly Linked List

typedef struct D_ListNode
{
    int val;
    struct D_ListNode *prev;
    struct D_ListNode *next;
}D_ListNode;

D_ListNode *NewNode(int val);
void print_head(D_ListNode *head);
void print_tail(D_ListNode *tail);

int main()
{
    // 初始化链表 1 <-> 3 <-> 2 <-> 5 <-> 4
    int size,val;
    printf("input size:");
    scanf("%d", &size);
    
    printf("input[0]val:");
    scanf("%d", &val);
    D_ListNode *head = NewNode(val);
    D_ListNode *tail = head;
    for (int i = 1; i < size; i++)
    {
        printf("input[%d]val:", i);
        scanf("%d", &val);
        D_ListNode *p = NewNode(val);
        tail->next = p;
        p->prev = tail;
        tail = p;
    }

    // 输出
    print_head(head);
    print_tail(tail);
}

D_ListNode *NewNode(int val)
{
    D_ListNode *p = (D_ListNode *)malloc(sizeof(D_ListNode));
    p->val = val;
    p->prev = NULL;
    p->next = NULL;
    return p;
}
// head输出
void print_head(D_ListNode *head)
{
    D_ListNode *p = head;
    while (p)
    {
        printf("%d->", p->val);
        p = p->next;
    }
    printf("\n");
}
// tail输出
void print_tail(D_ListNode *tail)
{
    D_ListNode *p = tail;
    while (p)
    {
        printf("%d<-", p->val);
        p = p->prev;
    }
    printf("\n");
}